home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / serien / purity / nr.42 / includes3v1 / includes3v1.lha / Exec / Semaphores.i < prev    next >
Text File  |  1994-12-04  |  2KB  |  84 lines

  1. {
  2.     Semaphores.i for PCQ Pascal
  3. }
  4.  
  5. {$I "Include:Exec/Nodes.i"}
  6. {$I "Include:Exec/Lists.i"}
  7. {$I "Include:Exec/Ports.i"}
  8. {$I "Include:Exec/Tasks.i"}
  9.  
  10.         { Semaphore }
  11. type
  12.     Semaphore = record
  13.         sm_MsgPort : MsgPort;
  14.         sm_Bids    : Short;
  15.     end;
  16.     SemaphorePtr = ^Semaphore;
  17.  
  18. {  This is the structure used to request a signal semaphore }
  19.  
  20.     SemaphoreRequest = record
  21.         sr_Link    : MinNode;
  22.         sr_Waiter  : TaskPtr;
  23.     end;
  24.     SemaphoreRequestPtr = ^SemaphoreRequest;
  25.  
  26. { The actual semaphore itself }
  27.  
  28.     SignalSemaphore = record
  29.         ss_Link         : Node;
  30.         ss_NestCount    : Short;
  31.         ss_WaitQueue    : MinList;
  32.         ss_MultipleLink : SemaphoreRequest;
  33.         ss_Owner        : TaskPtr;
  34.         ss_QueueCount   : Short;
  35.     end;
  36.     SignalSemaphorePtr = ^SignalSemaphore;
  37.  
  38.  
  39. {  ***** Semaphore procure message (for use in V39 Procure/Vacate ***{
  40.  SemaphoreMessage = Record
  41.    ssm_Message   : Message;
  42.    ssm_Semaphore : SignalSemaphorePtr;
  43.  end;
  44.  SemaphoreMessagePtr = ^SemaphoreMessage;
  45.  
  46. const
  47.  SM_SHARED      = 1;
  48.  SM_EXCLUSIVE   = 0;
  49.  
  50.  
  51. Procedure AddSemaphore(sigsem : SignalSemaphorePtr);
  52.     External;
  53.  
  54. Function AttemptSemaphore(sigsem : SignalSemaphorePtr) : Boolean;
  55.     External;
  56.  
  57. Function FindSemaphore(name : String) : SignalSemaphorePtr;
  58.     External;
  59.  
  60. Procedure InitSemaphore(sigsem : SignalSemaphorePtr);
  61.     External;
  62.  
  63. Procedure ObtainSemaphore(sigsem : SignalSemaphorePtr);
  64.     External;
  65.  
  66. Procedure ObtainSemaphoreList(semlist : ListPtr);
  67.     External;
  68.  
  69. Function Procure(sem : SemaphorePtr; bid : MessagePtr) : Boolean;
  70.     External;
  71.  
  72. Procedure ReleaseSemaphore(sigsem : SignalSemaphorePtr);
  73.     External;
  74.  
  75. Procedure ReleaseSemaphoreList(siglist : ListPtr);
  76.     External;
  77.  
  78. Procedure RemSemaphore(sigsem : SignalSemaphorePtr);
  79.     External;
  80.  
  81. Procedure Vacate(sem : SemaphorePtr);
  82.     External;
  83.  
  84.